package com.maimao.api.user;

import com.maimao.core.model.resp.PageResult;
import com.maimao.core.model.resp.Result;
import com.maimao.model.common.StatusInput;
import com.maimao.model.user.User;
import com.maimao.model.user.input.EmailInput;
import com.maimao.model.user.input.RegisterInput;
import com.maimao.model.user.input.UpdateIntegralInput;
import com.maimao.model.user.input.UpdatePwdInput;
import com.maimao.model.user.sys.vo.Permissions;
import com.maimao.model.user.vo.VerifyMethod;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @author MaoLin Wang
 * @date 2020/12/13 9:59 下午
 */
@Api(value = "会员接口")
@RequestMapping("/web/member")
public interface UserApi {

    @ApiOperation("根据用户名查询会员的权限信息")
    Result<?> getMemberPermissionByUsername(String username);

    @ApiOperation("根据手机号查询会员的权限信息")
    Result<?> getMemberPermissionByMobile(String mobile);


    @ApiOperation("根据邮箱查询会员权限")
    Result<?> getMemberPermissionByEmail(@RequestParam("email") String email);

    @ApiOperation("根据用户id查询证件地址")
    Result<?> getIdCardUrlByUid(Long userId);

    @ApiOperation("根据用户id查询证件信息")
    Result<?> getIdCardInfoByUid(Long userId);


    @ApiOperation("修改证件地址")
    Result<?> updateIdCard(Map<String, String> updateParams);

    @ApiOperation("申请开通店铺")
    Result<?> applyShop();

    @ApiOperation("会员注册")
    Result<?> register(RegisterInput registerInput, BindingResult bindingResult);

    @ApiOperation("查询用户积分")
    Result<?> queryUserIntegral(String userId);

    @ApiOperation("修改用户积分")
    Result updateIntegral(UpdateIntegralInput integralInput);

    @ApiOperation("查询用户名")
    Result<?> queryUserNameById(Long id);

    ////////////////////后台管理//////////////////////////
    @ApiOperation("后台条件查询用户")
    Result<?> listUser(User user, Integer page, Integer size);


    ////////////////////安全相关/////////////////////////

    @ApiOperation("修改密码发送邮件")
    Result<?> updatePwdSendEmail(EmailInput input);

    @ApiOperation("校验修改密码链接uuid")
    Result<?> verifyEmailUUID(String uuid);

    @ApiOperation("修改密码")
    Result<?> updatePwd(UpdatePwdInput input);

    @ApiOperation("绑定邮箱发送邮箱验证码")
    Result<?> bindEmailSendEmailCode(EmailInput input);

    @ApiOperation("查询用户可用的认证方式")
    Result<?> queryVerifyMethod();

    @ApiOperation("绑定邮箱")
    Result<?> bindEmail(EmailInput input);

    @ApiOperation("冻结/恢复用户")
    Result<?> freezeRestore(StatusInput input);

    @ApiOperation("当前用户个人基本信息")
    Result<?> baseInfo();

    @ApiOperation("修改基本信息")
    Result<?>updateBaseInfo(User user);
}
